Image data is formed by pixels. A pixel is defined as a point that can be displayed on a display screen. Color values are assigned for pixels and are commonly stored in a memory as 1-bit monochrome, 4-bit palettized, 8-bit palettized, 16-bit highcolor, and 24-bit truecolor formats. To reconstruct an image on the display screen, a display controller obtains color values for pixels from the memory and causes the color values to be displayed on a display device. When the stored image is displayed without rotation, the display controller requests, for example, 32 byte transactions per request to retrieve pixels sequentially across rows from the memory. Each row/line of pixels is then sequentially displayed on the display screen in rows/lines (e.g. top row to bottom row). Since the retrieved data corresponds to the displayed data, there is no re-fetching of data (e.g. once the data is requested, it is used/displayed sequentially and not thrown away).
However when the stored image is displayed in a rotated form (e.g. 90 degree rotation), inefficient memory accesses are performed and some data that is retrieved gets discarded. For example, the display controller can only use and display one pixel from a horizontal line at a time since pixels are read from the memory in horizontal lines, but then are rotated to vertical lines (e.g. in 90 degree rotation). This leaves only one pixel to be displayed while the others are discarded. Depending on the image format, one pixel can be 4 bytes (RGB32/24), 3 bytes (RGB24p), 2 bytes (RGB16), or 1 byte (YCbCr). If the minimum transaction is 8 bytes, there is unused data that is discarded and that will need to be re-fetched again in subsequent memory accesses. This is especially inefficient for YCbCr image formats since the same data is fetched 8 times over the duration of one image frame. Hence, bandwidth usage is increased by 8 times. A more efficient way to process and display image data may be desirable.